/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the 'License');
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import ir from '~/vendor/arkanalyzer';

import { Location } from '~/type/Generic';

export function getIrLocationOfToken(stmt: ir.Stmt, token: string): Location {
    const originPosition = stmt.getOriginPositionInfo();
    const line = originPosition.getLineNo();
    const arkFile = stmt.getCfg()?.getDeclaringMethod().getDeclaringArkFile();
    if (!arkFile) {
        throw new Error(`ArkFile ${arkFile} is null`);
    }
    const originText = stmt.getOriginalText() ?? '';
    let startCol = originPosition.getColNo();
    const pos = originText.indexOf(token);
    const originPath = arkFile.getFilePath();
    if (pos !== -1) {
        startCol += pos;
        const endCol = startCol + token.length - 1;
        return {
            file: originPath,
            range: {
                start: {
                    line: line,
                    column: startCol,
                },
                end: {
                    line: line,
                    column: endCol,
                },
            },
        };
    } else {
        return {
            file: originPath,
            range: {
                start: {
                    line: line,
                    column: startCol,
                },
                end: {
                    line: line,
                    column: startCol,
                },
            },
        };
    }
}
